
// 回调函数造成隐式丢失：
function sayHi() {
    console.log('Hello,', this.name);
}
var person1 = {
    name: 'YvetteLau',
    sayHi: function () {
        setTimeout(function () {
            console.log('Hello,', this.name);
        })
    }
}
var person2 = {
    name: 'Christina',
    sayHi: sayHi
}
var name = 'Wiliam';
person1.sayHi();
setTimeout(person2.sayHi, 100);
setTimeout(function () {
    person2.sayHi();
}, 200);

// 第一条输出很容易理解，setTimeout的回调函数中，this使用的是默认绑定，非严格模式下，执行的是全局对象
// 第二条输出可以这样理解： setTimeout(fn,delay){ fn(); },相当于是将person2.sayHi赋值给了一个变量，最后执行了变量，这个时候，sayHi中的this显然和person2就没有关系了。
// 第三条虽然也是在setTimeout的回调中，但是我们可以看出，这是执行的是person2.sayHi()使用的是隐式绑定，因此这是this指向的是person2，跟当前的作用域没有任何关系。